15
תגובות
אני צריך למצוא מחרוזת כדי שתשמש בתור ID לתמונה, בשביל אתר העלאת תמונות, כדי שלא יווצר מצב אף פעם שתמונה תחליף אחרת, אני צריך גם לבדוק במסד אם ה-ID קיים, אני יכול לעשו את הבדיקה 2 או 3 פעמים אבל גם אז לא יהי מובטח שיהיה אותו ID, יש למישהו רעיון איך אני יכול להמשיך לבדוק עד שיהיה 100% שה-ID לא קיים?
תודה.
אגב- יש לי כבר קוד למחרוזת רק העניין שזה ימשיך לבדוק עד שזה יהיה פנוי.
-----------
עבדתי על זה עוד קצת זמן, הקוד הזה תקין?
for($ID = generateRandomString(10); mysql_num_rows(mysql_query("SELECT `ID` FROM `Posts` WHERE `ID`='$ID'")) != 0; $ID = generateRandomString(10);) {
    }

15 תשובות

avatar ענה Splash ב 24 ליוני 2014 #

מאוד לא מומלץ לבצע בדיקה מהסוג הזה מול מסד נתונים משום שכל פעם הוא יעבור מחדש על כל השורות ברגע שלא קיים ה id הזה.
ויש כמובן גם את המקרים שהוא כן ימצא ואז תצטרך להריץ יותר משאילתה אחת.
אז נכון בהתחלה הוא עושה את זה מהר כי יש רק כמה אלפי קבצים אך מה קורה ברגע שיהיו קיימים מיליונים או עשרות מיליונים ?

עדיף לבדוק אם הקובץ קיים במקום בו אתה שומר את הקבצים בצורה הזאת -

do{
    $file_name = generateRandomString(10).'.'.$ext;
}while(file_exists('my_files_path/'.$file_name));


שים לב שבמקרה הזה הכנסתי את ext לשם אני ממליץ לך בכללי להוסיף את זה לכתובת ככה שלדוגמא הכתובת שלך תהפוך מ

my_site.com/*key*
ל
my_site.com/*key*.jpeg

ואז בעצם יווצר מצב שאם כבר קיים ה key הזה הוא יתאפשר במידה והם לא חולקים את אותה סיומת.

avatar ענה yossi787 ב 24 ליוני 2014 #

תודה רבה, יש לי עוד שאלה, אבל לא קשורה לנושא, אם אני רוצה שהקבצים ימחקו כל X שעות / שניות, איך אני יכול לקבוע שזה יקרה באופן קבוע, גם שאני / המשתמש לא באתר?

avatar ענה Splash ב 24 ליוני 2014 #

בעזרת cron job,תיצור בדיקה שרצה על כל הקבצים בתיקיה X ותבדוק מתי הם עודכנו לאחרונה\נוצרו במידה והתאריך גדול מהזמן שהגדרת -> תמחק את הקובץ.

שים לב שבמידה ומדובר בהרבה קבצים זה יכול להגיע למצב שיקח לו זמן לבצע את הפעולה ויכול להיות מצב שעדיף יהיה לך לבצע את זה באמצעות שפה עילית [בהנחה שיש לך vps\שרת]

avatar ענה yossi787 ב 24 ליוני 2014 #

הבעיה היא שזה לא זמן מוגדר לכל הקבצים, אלא המשתמש בוחר תוך כמה זמן זה ימחק, אפשר עם ה-cron job להריץ קובץ PHP כל כמה זמן (שהוא בעצם ישווה בין הזמן למחיקה והזמן העכשווי וימחק את זה לבד)?

avatar ענה Splash ב 24 ליוני 2014 #

אתה יכול לשמור ב DB את התאריך שבו הקובץ אמור להימחק וב cron job לבדוק אם התאריך כרגע גדול מהתאריך שבו הוא אמור להימחק -> מחק את השורה במסד + מהשרת.

avatar ענה yossi787 ב 24 ליוני 2014 #

נתקלתי בבעיה די מוזרה: כשאני מפעיל את הקובץ, הכל עובד וכו' שצריך, התמונה מוחלפת (אני מעדיף שזה יהפוך לריבוע ריק מאשר ימחק) ובמסד זה מתעדכן, אבל משום מה כשזה מופעל ב-cron job, המסד מתעדכן אבל התמונה לא נמחקת, אתה אולי יודע מה עלול להיות מקור הבעיה?

avatar ענה Splash ב 24 ליוני 2014 #

אם אתה לא רוצה שזה באמת ימחק מהשרת ,אין צורך לעדכן את הנתונים במסד,פשוט בשליפה של הקובץ תשלוף גם תאריך מחיקה ועם התאריך עבר אז תציג את התמונה שאתה רוצה.

avatar ענה yossi787 ב 24 ליוני 2014 #

יש מצב שלא הבנתי אותך נכון, אבל אני רוצה להציג את זה באתרים אחרים (פורומים וכדומה), בגלל זה כל הסיבוך.

avatar ענה Splash ב 24 ליוני 2014 #

זה לא בעיה ,תיצור נתיב מזויף באמצעות htaccess [apache?] ובעזרת php תשלח header של תמונה,עכשיו אם התמונה אמורה להימחק מהשרת -> תציג את התמונה בתור התמונה שאתה רוצה,אחרת -> תציג את התמונה המקורית

avatar ענה yossi787 ב 25 ליוני 2014 #

תודה זה עובד.. אבל עכשיו בעיה שלא נראה לי שיש לה פיתרון- יש אפשרות לשים תמונה כזאת בפייסבוק (בסטטוס) בלי להעלות אותה לשם, זאת אומרת שעדיין תשאר שליטה על התמונה (לאחר ההעלאה הפייסבוק מעלה את זה לשרת שלו, ואז אין לי כלום מה לעשות).

avatar ענה intval ב 25 ליוני 2014 #

הייתי ממליץ לא ללכת על לולאה כלשהי למציאת מחרוזת רנדומלית, בגלל שזו פעולה שיכולה לקחת הרבה מאוד זמן והמון משאבים, באיחוד אם יעלו הרבה תמונות.
במקום זה, הייתי הולך על יצירת מחרוזת רנדומלית שהיא בוודאות לא בשימוש, למשל בצורה הבאה:

$name = rand().microtime(true);

אם לא קריטי לך שהעורך של הנתיב יהיה תמיד 10 תווים - זו דרך שתחסוך לשרת את המשאבים.

avatar ענה Splash ב 25 ליוני 2014 #

ענית לעצמך על התשובה,פייסבוק מעלה את התמונות לשרת שלו על מנת שהוא לא יסתמך על השרת שלך.
גם מבחינת מהירות [לא נראה טוב שפתאום לתמונה לוקח כמה שניות] וגם מהבחינה שאתה שולט על התוכן של התמונה,אתה יכול לדאוג שמשתמשים ממדינה X יראו תמונה פורנוגרפית ומשתמשים ממדינה Y יראו תמונה אחרת לגמרי.

avatar ענה yossi787 ב 25 ליוני 2014 #

אלכס, תודה :)
ו-Splash תהיה בטוח שאלו לא הכוונות שלי ><

avatar ענה Splash ב 25 ליוני 2014 #

זה לא משנה מה הכוונות שלך הם לא רוצים לתת לך להתעסק להם עם התמונות,אם אתה רוצה למחוק את התמונה הם נותנים לך את האפשרות באמצעות ה API שלהם וגם באמצעות האתר שלהם.

אני לא יודע כמה זה יעזור לך אבל אתה מוזמן לקרוא כאן -
https://developers.facebook.com/docs/graph-api/reference/v2.0/photo

שים לב שעל מנת למחוק תמונה מפייסבוק היא צריכה להתפרסם ע"י האפליקציה שלך ובנוסף גם לפרסום וגם למחיקה נדרש publish_actions שלא כזה פשוט לקבל ההרשאה הזאת ופייסבוק תצטרך הוכחה ממשית לחשיבות של הפעולה ורק אם הם יראו לנכון הם יאשרו לך.

ספק מאוד גדול שהם יתנו לך למטרה הזאת ובנוסף ממש פשוט לעקוף את העניין ופשוט להוריד את התמונה למחשב ולהעלות אותה לפייסבוק בצורה רגילה.

avatar ענה yossi787 ב 25 ליוני 2014 #

תודה, כבר ירדתי מהרעיון הזה..